#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-48,ch=getchar();}
	return x*f;
}
int n,c[N],t[N],w[N],f[N],tot,sum,m,ans;
pair<int,int> p[N];

bool cmp(pair<int,int> a,pair<int,int> b){
	return a.second*b.first<b.second*a.first;
}

signed main(){
	freopen("book.in","r",stdin);
	freopen("book.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++) c[i]=read(),sum+=c[i];
	for(int i=1;i<=n;i++) t[i]=read();
	for(int i=1;i<=n;i++) w[i]=read();
	m=read();
	if(sum<=20){
		for(int i=1;i<=n;i++){
			while(c[i]){
				c[i]--;
				p[++tot]={t[i],w[i]};
			}
		}
		for(int i=0;i<(1<<tot);i++){
			int sumt=0,res=0;
			for(int j=1;j<=tot;j++)
				if(i>>(j-1)&1)
					sumt+=p[j].first,res+=p[j].second;
			if(sumt<=m) ans=max(ans,res);
		}
		printf("%lld",ans);
	}
	else{
		for(int i=1;i<=n;i++){
			for(int j=1;;j<<=1){
				if(j>c[i]) break;
				c[i]-=j;
				p[++tot]={t[i]*j,w[i]*j};
			}
			if(c[i]) p[++tot]={t[i]*c[i],w[i]*c[i]};
		}
		sort(p+1,p+1+tot);
		int add=0;
		while(tot){
			if(m<=10000) break;
			if(m>=p[tot].first){
				m-=p[tot].first;
				add+=p[tot].second;
			}
			tot--;
		}
		for(int i=1;i<=tot;++i){
			int v=p[i].first,w=p[i].second;
			for(int j=m;j>=v;--j)
				f[j]=max(f[j],f[j-v]+w);
		}
		printf("%lld",f[m]+add);		
	}
	return 0;
}